#pragma once

#include <vector>

#include "Controller/Behavior.hpp"
#include "Controller/ViewDataPair.hpp"

#include "Command/Command.hpp"
#include "Command/CommandStack.hpp"

#include "Data/Data.hpp"
#include "Data/CurveData.hpp"
#include "Data/Point2DData.hpp"

#include "Graphics/Graphics.hpp"
#include "Graphics/OGLGraphics.hpp"

//#include "FileSystem.hpp"

class Behavior;

class MainControl
{
    friend class Behavior;

private:
    static std::vector<ViewDataPairCurve*> pairs;
    static Behavior *behavior;
    static CommandStack* cStack;
    static Graphics* graphics;

public:

    virtual ~MainControl(){}

    static void setBehavior(Behavior *_behavior);

    static void setGraphics(Graphics *_graphics);

    static void addCurveData(CurveData *_data);

    static void addMultiplyCurveData(CurveData *_data[], int _count);

    static void updateCurveValue(double _value);

    static CurveData* getCurveDataByIndex(int _index);
};
